package someTestExcemple.ioStream;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class FileTest2 {
    public static void main(String[] args) {
        List<String> list = searchFile(new File("D:\\myPrivateFiles\\jottings"), "长生乱");
        System.out.println(list);
        deleteDir(new File("D:\\myPrivateFiles\\jottings\\deleteDirTest"));
    }
    public static void test1() {
        //获取当前文件夹下的一级目录
        File f = new File("D:\\myPrivateFiles");
        String [] str = f.list(); //获取当前目录下的一级文件名称
        for (String s : str) {
            System.out.println(s);
        }
        System.out.println("----------------------------------------");
        File f1 = new File("D:\\myPrivateFiles\\jottings\\mkdirTest");
        File[] files = f1.listFiles(); //获取当前目录下的所有一级文件对象
        //注意如果当前其实是一个文件 则files为null;如果是空文件夹 则files不为null，但是files.length为0
        //如果是一个文件夹，但是没有权限获取 则files为null
        for(File file : files) {
            System.out.println(file.getAbsolutePath()); //输出所有一级文件对象的绝对路径
            System.out.println(file.getName().indexOf(".")); //返回第一次出现java的索引的位置，如果没出现则返回-1
            //更改文件名称
            if (file.getName().contains("_.")) {
                String firstName = file.getName().substring(0, file.getName().indexOf("_."));
                String lastName = file.getName().substring(file.getName().indexOf("_.")); //截取文件名"."之后的内容
                String newName = Integer.valueOf(firstName) +10 + lastName; //序号+10_文件名
                if(file.renameTo(new File(file.getParent() + File.separator + newName))) {
                    System.out.println("重命名成功");
                } else {
                    System.out.println("重命名失败");
                }
            }
        }
    }

    /**
     *  去目录下搜索某个文件
     * @param dir  //目录
     * @param fileName //文件名
     */
    public static List<String> searchFile(File dir, String fileName) {
        //1.拦截非法情况 比如该路径下不存在
        if (dir == null || !dir.exists() || !dir.isDirectory() || fileName == null) {
            System.out.println("参数不合法");
            return new ArrayList<>();
        }
        File[] files = dir.listFiles();  //获取当前目录下的所有一级文件对象
        List<String> list = new ArrayList<>();
        //排除当前目录下的是文件或者非空文件夹但是没读取权限,或者空文件夹
        if (files != null && files.length > 0) {
            for (File file : files) {
                if (file.isFile()) {
                    //如果是文件就进行判断-是否是要搜索的文件名称
                    if (file.getName().contains(fileName)) {
                        System.out.println(file.getName());
                        System.out.println(file.getName() + " --->" + file.getAbsolutePath());
                        list.add(file.getName() + " --->" + file.getAbsolutePath());
                    }
                } else {
                    //如果是文件夹就递归搜索
                    list.addAll(searchFile(file, fileName));
                }
            }
        }
        return list;
    }

    /**
     * 删除文件夹 或者文件
     * @param dir
     */
    public static void deleteDir(File dir) {
        if (dir == null || !dir.exists()) {
            return;
        }
        if (dir.isFile()) {
            dir.delete();
        } else if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            if (files != null && files.length > 0) {
                for (File file : files) {
                    deleteDir(file);
                }
            }
            //文件夹下所有文件都删除了，就可以删除空文件夹了
            dir.delete();
        }
    }
}
